<script>
    //['5']首先会变成 '5', 然后再变成数字 5
    console.log([1,2] == '1,2')
    console.log({} == 0)
    console.log(false == 0)
</script>



坑一：字符串连接符与算术运算符隐式转换规则混淆
<script>
    //+是字符串连接符：String(1)+'true'
    console.log(1+'true')//'1true'
    //+是算术运算符 1+Number(true)=1+1=2
    console.log(1+true)//2
    //+是算术运算符 1+Number(undefined)=1+NaN=NaN
    console.log(1+undefined)//NaN,undefined 转换为数字是 NaN
    //+是算术运算符 1+Number(null)=1+0=1
    console.log(1+null)//1
    console.log([5]+2)//52
    console.log(undefined+null)//NaN
    console.log(undefined-null)//NaN
    console.log(undefined-undefined)//NaN
    console.log(null-null)//0
    console.log(null+null)//0

    //Number(true)=1 Number(false)=0 Number(undefined)=NaN Number(null)=0
</script>

坑二：关系运算符：会把其他数据类型转换成number之后再比较关系
<script>
    //当关系运算符两边有一边是字符串的时候，会将其使用Number（）转换，然后进行比较
    console.log('2'>10)//false
    //当关系运算符两边都是字符串的时候，此时同时转成Number（）进行比较，但是，此时并不是直接按照Number的形式转成数字
    //而是按照字符串对应的unicode编码来转成数字，使用字符串.charCodeAt()方法可以拿到字符串对应的编码
    //'2'.charCodeAt()=50,'10'.chatCodeAt()=49
    console.log('2'>'10')//true
    //对于这种2边都是纯字母的比较，是从左往右1v1进行比较，也就是a和b进行比较，a的unicode是97，b的是98
    //而且比的时候满足条件就成立了，不得往后看了
    console.log('abc'>'b')//false
    //a与a一样，看第二个，b与a,b的unicode大于a，成立
    console.log('abc'>'aab')//true
    //特殊情况直接无视规则，都是固定结果
    console.log(undefined == undefined)//true
    console.log(undefined == null)//true
    console.log(null == null)//true
    //NaN与任何数据比较都是NaN
    console.log(NaN == NaN)//false
</script>

<script>
    //原理：
    //[].valueOf().toString()得到空字符串
    //Number('') = 0
    console.log([] == 0)//true
    //原理：
    //[]是true，![]是false，Number(false)=0
    console.log(![] == 0)//true
    console.log([] == ![])//true
    //引用类型数据存在堆中，栈中存储的是地址，2个数组，地址不同
    console.log([] == [])//false
    console.log({} == !{})//false
    console.log({} == {})//false
</script>

<script>
    console.log('====')
    console.log(null == undefined)//true
    console.log([1,2] == '1,2')//true
    //undefined和null与其他数在进行相等判断时不进行类型转换
    console.log(0 == null)//false.这个地方做错了，console.log(0+null)和相等比较的时候不一样
    console.log(0.1+0.2 == 0.3)//false
    console.log([] == 0)//true
</script>
